package br.com.findme.findmeserver.entidade;

import java.io.Serializable;
import java.lang.reflect.Type;

import javax.persistence.*;

import br.com.findme.findmeserver.entidade.Localizacao;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

import java.sql.Timestamp;


/**
 * The persistent class for the T_LOCALIZACAO database table.
 * 
 */
@Entity
@Table(name="T_LOCALIZACAO")
public class Localizacao implements Serializable {
	private static final long serialVersionUID = 1L;
	private int id;
	private Timestamp dataLoc;
	private Double latitude;
	private Double longitude;
	private boolean dentroDaDistanciaPermitida = true;
	private Usuario usuario;

	public Localizacao() {
	}


	@Id
	public int getId() {
		return this.id;
	}

	public void setId(int id) {
		this.id = id;
	}


	@Column(name="DATA_LOC")
	public Timestamp getDataLoc() {
		return this.dataLoc;
	}

	public void setDataLoc(Timestamp dataLoc) {
		this.dataLoc = dataLoc;
	}


	public Double getLatitude() {
		return this.latitude;
	}

	public void setLatitude(Double latitude) {
		this.latitude = latitude;
	}


	public Double getLongitude() {
		return this.longitude;
	}

	public void setLongitude(Double longitude) {
		this.longitude = longitude;
	}


	//bi-directional many-to-one association to Usuario
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="USUARIO_ID")
	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
		
	@Transient
	public boolean isDentroDaDistanciaPermitida() {
		return dentroDaDistanciaPermitida;
	}


	public void setDentroDaDistanciaPermitida(boolean dentroDaDistanciaPermitida) {
		this.dentroDaDistanciaPermitida = dentroDaDistanciaPermitida;
	}


	public static JsonSerializer<Localizacao> toJSON(){
		
		return new JsonSerializer<Localizacao>(){

			@Override
			public JsonElement serialize(Localizacao localizacao, Type type, JsonSerializationContext context) {				
				JsonObject jsonObject = new JsonObject();
		        jsonObject.addProperty("id", localizacao.getId());
		        jsonObject.addProperty("dataLoc", localizacao.getDataLoc().toString());
		        jsonObject.addProperty("latitude", localizacao.getLatitude());
		        jsonObject.addProperty("longitude", localizacao.getLongitude());
		        jsonObject.addProperty("dentroDaDistanciaPermitida", localizacao.isDentroDaDistanciaPermitida());
		        
		        jsonObject.add("usuario", Usuario.toJSON().serialize(localizacao.getUsuario(),null,null));
		        return jsonObject;			
		     }			
		};
		
	}

}